ยินดีต้อนรับสู่ การถ่ายโอนครั้งใหญ่. ในโปรแกรมสำหรับหน่วยประมวลผลหลัก (CPU) เราจะกำหนด วิธีใด ในการวนซ้ำ; ในระบบประมวลผลแบบทั่วไปบนหน่วยประมวลผล (GPGPU) เราจะกำหนด อะไร ลักษณะของการวนซ้ำเป็นอย่างไร ความเปลี่ยนแปลงจากตรรกะที่เน้นคำสั่ง เป็นตรรกะที่เน้นข้อมูล ได้รับพลังงานจาก การสร้างแนวคิดพื้นฐานของเคอร์เนล.
1. โครงร่าง __global__
โดยใช้ __global__ ตัวชี้วัด คุณไม่ได้เขียนฟังก์ชัน—คุณกำลังออกแบบ โครงร่างที่ขยายขนาดได้. การดำเนินการเคอร์เนลเพียงครั้งเดียวแสดงถึงหน่วยงานงานอิสระหนึ่งหน่วย ทำให้หน่วยประมวลผลกราฟิก (GPU) สามารถจัดการงานที่เหมือนกันหลายพันงานในจำนวนคอร์ที่มากมหาศาล โดยไม่จำเป็นต้องควบคุมเธรดด้วยตนเอง
2. ตัวแก้ปัญหาที่อยู่ทั่วโลก
แล้วหนึ่งเธรดจากหลายล้านตัวจะหาเป้าหมายของมันได้อย่างไร? มันใช้ข้อตกลงที่แน่นอนที่เรียกว่าสูตรการระบุตำแหน่ง:
$$\text{threadID} = \text{blockIdx.x} \times \text{blockDim.x} + \text{threadIdx.x}$$
สูตรนี้ทำหน้าที่เป็นระบบพิกัด ช่วยเชื่อมโยงข้อมูลเชิงตรรกะของซอฟต์แวร์ (อาร์เรย์) กับลำดับชั้นทางกายภาพของฮาร์ดแวร์ (บล็อกและเธรด)
3. การกำหนดการดำเนินการ
การตั้งค่า <<<B, T>>> พารามิเตอร์ต่างๆ จะกำหนดรูปร่างของกริด ซึ่งช่วยให้มั่นใจได้ว่า ความสามารถในการขยายขนาดอย่างโปร่งใส: โค้ดของคุณจะทำงานด้วยตรรกะเหมือนกัน ไม่ว่าฮาร์ดแวร์จะมี 2 SM หรือ 80 SM